<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>vue学习</title>
    <script src="./js/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <!-- 
        自定义指令中不能使用this来获取组件中的数据
        如果你就需要用this中的数据，可以通过参数3vNode对象来获取  vnode.ctx
      -->
      <input type="text" v-model="username" v-username />
      <span>{{usernameMsg}}</span>
    </div>
    <script>
      const app = Vue.createApp({
        data() {
          return {
            username: '',
            usernameMsg: ''
          }
        },
        // 自定义指令中不能使用this来获取数据源中的数据或methods中的方法
        directives: {
          username(el, bindings, vnode) {
            if (el.value != '' && el.value.length <= 5) {
              // console.log('过短', vnode)
              vnode.ctx.data.usernameMsg = '用户名少于5位'
            } else {
              vnode.ctx.data.usernameMsg = ''
            }
          }
        }
      })
      app.mount('#app')
    </script>
  </body>
</html>
